﻿//using System.IO;
//using System.Xml;
//using Wizard.Compiler.Parsers;

//namespace Wizard.Compiler.Tokenizers
//{
//    internal class XmlTokenizer : BaseTokenizer
//    {
//        public XmlTokenizer(SourcePos sourcePos)
//            : base(sourcePos)
//        {
//        }
//    //    private readonly string mFilename;
//    //    private readonly XmlReader mXmlReader;
//    //    private StatementType mToken;
//    //    private string mValue;

//    //    public XmlTokenizer(string filename, TextReader textReader)
//    //    {
//    //        var settings = new XmlReaderSettings();
//    //        settings.IgnoreComments = true;
//    //        settings.IgnoreWhitespace = true;
//    //        settings.IgnoreProcessingInstructions = true;
//    //        mXmlReader = XmlReader.Create(textReader, settings);
//    //        mFilename = filename;
//    //    }

//    //    #region IStatementReader Members

//    //    StatementType IStatementReader.StatementType
//    //    {
//    //        get { return mToken; }
//    //    }

//    //    StatementType IStatementReader.NextStatement()
//    //    {
//    //        mValue = string.Empty;
//    //        if (mXmlReader.NodeType == XmlNodeType.Element
//    //            && mToken != StatementType.EndElement
//    //            && mXmlReader.IsEmptyElement)
//    //        {
//    //            mToken = StatementType.EndElement;
//    //            return mToken;
//    //        }
//    //        while (true)
//    //        {
//    //            mXmlReader.Read();

//    //            switch (mXmlReader.NodeType)
//    //            {
//    //                case XmlNodeType.Element:
//    //                    switch (mXmlReader.Name)
//    //                    {
//    //                        case "class":
//    //                            mToken = StatementType.Class;
//    //                            return mToken;
//    //                        case "method":
//    //                            mToken = StatementType.Method;
//    //                            return mToken;
//    //                        case "statement":
//    //                            mToken = StatementType.Statement;
//    //                            return mToken;
//    //                        case "block":
//    //                            mToken = StatementType.Block;
//    //                            return mToken;
//    //                        case "field":
//    //                            mToken = StatementType.Field;
//    //                            return mToken;
//    //                        default:
//    //                            throw new TokenizerException(string.Format("Unknown element {0}", mXmlReader.Name));
//    //                    }
//    //                case XmlNodeType.EndElement:
//    //                    mToken = StatementType.EndElement;
//    //                    return mToken;
//    //                case XmlNodeType.XmlDeclaration:
//    //                    //ignore
//    //                    break;
//    //                case XmlNodeType.Text:
//    //                    mToken = StatementType.FieldValue;
//    //                    mValue = mXmlReader.Value;
//    //                    return mToken;
//    //                case XmlNodeType.None:
//    //                    mToken = StatementType.EndOfFile;
//    //                    return mToken;
//    //                default:
//    //                    throw new TokenizerException(string.Format("Unexpected Node {0}", mXmlReader.NodeType));
//    //            }
//    //        }
//    //    }

//    //    int IStatementReader.Line
//    //    {
//    //        get
//    //        {
//    //            if (mXmlReader is XmlTextReader)
//    //            {
//    //                return ((XmlTextReader) mXmlReader).LineNumber;
//    //            }
//    //            return 0;
//    //        }
//    //    }

//    //    int IStatementReader.Column
//    //    {
//    //        get
//    //        {
//    //            if (mXmlReader is XmlTextReader)
//    //            {
//    //                return ((XmlTextReader) mXmlReader).LinePosition;
//    //            }
//    //            return 0;
//    //        }
//    //    }

//    //    string IStatementReader.Value
//    //    {
//    //        get { return mValue; }
//    //    }

//    //    string IStatementReader.GetAttribute(string name)
//    //    {
//    //        return mXmlReader[name];
//    //    }

//    //    string IStatementReader.Filename
//    //    {
//    //        get { return mFilename; }
//    //    }

//    //    #endregion

//        protected internal override int GetUnaryPriority(TokenType type)
//        {
//            throw new System.NotImplementedException();
//        }

//        protected internal override int GetPriority(IHasValue ValueLeft, TokenType tt)
//        {
//            throw new System.NotImplementedException();
//        }
//    }
//}